package com.wjm.api;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

/**
 * Data:2022年07月05日
 * Author:wjm
 * Content: 迭代器
 *
 *
 *  什么是迭代：
 *           在取集合元素之前要先判断集合元素是否存在,(判断的方法就是：问一下有没有下一个元素)，如果有就把该元素取出
 *         接着就会继续判断有没有下一个元素，有就继续取出，一直重复该操作，直到元素取完。这个方法就叫跌代。
 *
 *  为什么要用迭代的方式取元素：
 *            因为集合的长度是不确定的。
 *
 *   迭代器：Interator对象就叫做迭代器
 *
 *   迭代器的快速失败机制 fail-fast
 *             在迭代器迭代集合中的元素时，是不可以使用迭代器以为的方法去操作集合的
 *
 *   迭代器循环过程：
 *              “问”，“取”，“删”（删不是必要动作）
 *
 */
public class InteratorDemo {
    public static void main(String[] args) {
        //创建一个集合对象
        Collection collection = new HashSet();
        collection.add("java");
        collection.add("c++");
        collection.add("c语言");
        collection.add("python");
        collection.add("java");
        System.out.println(collection);
        System.out.println("----------------");

        //创建迭代器对象  使用的是 集合.iterator();方法
        Iterator iterator = collection.iterator();

        //boolean hasNext(); 判断是否有下一个元素
        while (iterator.hasNext()){
            //程序能进来说明是有的，那么取出来
            Object o = iterator.next();
            System.out.println(o);


            /*
            * 迭代器的快速失败机制 fail-fast
            *      在迭代器迭代集合中的元素时，是不可以使用迭代器以为的方法去操作集合的
            * */
            //collection.add("wjm"); 会报错 ConcurrentModificationException

            //remove(); 方法是移除当前的元素，所以使用的时候一般要加一个判断
            if (o.equals("c++")){
                iterator.remove();
            }
        }
        System.out.println(collection);

    }
}
